package com.smart.community.work.entity;

import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.smart.community.commons.base.BaseEntity;

import lombok.Data;
import lombok.EqualsAndHashCode;

import java.math.BigDecimal;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;

/**
 * 请假记录实体类
 * 
 * 严格按照《Java后端SpringBoot代码开发规范_重构版.md》Entity规范实现：
 * - 继承BaseEntity：获得标准字段（id、createTime、updateTime、createBy、updateBy、version、deleted）
 * - 功能单一原则：Entity类必须是单纯的数据库字段映射的Bean对象，功能必须单一
 * - 禁止枚举类：所有枚举字段都使用String类型存储，避免使用枚举类
 * - 禁止工具方法：只保留基本的getter/setter方法，禁止添加工具方法
 * - 完整注释：所有字段都有完整的JavaDoc注释
 * - 字段映射：使用@TableField注解正确映射数据库字段
 * 
 * @author Wu.Liang
 * @since 2025-01-30
 * @version 1.0.0
 */
@Data
@EqualsAndHashCode(callSuper = true)
@TableName("sc_leave")
public class Leave extends BaseEntity {
    private static final long serialVersionUID = 1L;

    /**
     * 用户ID
     */
    @TableField("user_id")
    private Long userId;

    /**
     * 请假类型：personal-事假，sick-病假，annual-年假，compensatory-调休
     */
    @TableField("leave_type")
    private String leaveType;

    /**
     * 开始日期
     */
    @JsonFormat(pattern = "yyyy-MM-dd")
    @TableField("start_date")
    private LocalDate startDate;

    /**
     * 结束日期
     */
    @JsonFormat(pattern = "yyyy-MM-dd")
    @TableField("end_date")
    private LocalDate endDate;

    /**
     * 开始时间
     */
    @JsonFormat(pattern = "HH:mm:ss")
    @TableField("start_time")
    private LocalTime startTime;

    /**
     * 结束时间
     */
    @JsonFormat(pattern = "HH:mm:ss")
    @TableField("end_time")
    private LocalTime endTime;

    /**
     * 请假天数
     */
    @TableField("days")
    private BigDecimal days;

    /**
     * 请假原因
     */
    @TableField("reason")
    private String reason;

    /**
     * 状态：1-待审批，2-已批准，3-已拒绝，4-已撤销
     */
    @TableField("status")
    private Integer status;

    /**
     * 审批人ID
     */
    @TableField("approver_id")
    private Long approverId;

    /**
     * 审批时间
     */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @TableField("approve_time")
    private LocalDateTime approveTime;

    /**
     * 审批备注
     */
    @TableField("approve_remark")
    private String approveRemark;

    /**
     * 附件URL（如病假证明）
     * @deprecated 使用attachments字段替代，支持JSON格式文件信息
     */
    @TableField("attachment_url")
    private String attachmentUrl;

    /**
     * 附件信息（JSON格式）
     * 按照《用户上传文件功能使用指南.md》规范存储文件信息
     * 格式：[{"id":"文件ID","fileName":"文件名","fileUrl":"文件URL","fileSize":文件大小,"uploadType":"上传类型","uploadSource":"上传来源",...}]
     */
    @TableField("attachments")
    private String attachments;

    /**
     * 物业公司ID
     */
    @TableField("property_company_id")
    private Long propertyCompanyId;
}
